home *** CD-ROM | disk | FTP | other *** search
/ Delphi Programmer's Power Pack / Delphi Volume 1.iso / e_to_l / isamexpt / isamsuch.pas < prev    next >
Pascal/Delphi Source File  |  1996-09-15  |  5KB  |  154 lines

  1. unit Isamsuch;
  2. {copyright 1995 by Norbert Stellberg GmbH}
  3. interface
  4.  
  5. uses WinTypes, WinProcs, Classes, Graphics, Forms, Controls, Buttons,
  6.   StdCtrls, ExtCtrls, IsamTabl, Fvcbrows, Isambrow, LowBrows, Filer;
  7.  
  8. type
  9.   TSuchDlg = class(TForm)
  10.     {the dialog to search for fields in your isamtable,
  11.      don't call this dialog directly, better call it
  12.      with SUCH_EINSTELLEN(...), described later in this file}
  13.     OKBtn: TBitBtn;
  14.     CancelBtn: TBitBtn;
  15.     Bevel1: TBevel;
  16.     Label1: TLabel;
  17.     Edit1: TEdit;
  18.     IsamTable1: TIsamTable;
  19.     IsamBrowser1: TIsamBrowser;
  20.     ComboBox1: TComboBox;
  21.     Label2: TLabel;
  22.     function IsamBrowser1BuildRow(Sender: TObject;
  23.       var RR: RowRec): Integer;
  24.     procedure FormShow(Sender: TObject);
  25.     procedure Edit1Change(Sender: TObject);
  26.     procedure OKBtnClick(Sender: TObject);
  27.     procedure ComboBox1Change(Sender: TObject);
  28.     procedure FormCreate(Sender: TObject);
  29.   public
  30.     RecordData: Pointer;
  31.     RecordDup: Pointer;
  32.   end;
  33.  
  34. var
  35.   SuchDlg: TSuchDlg;
  36.  
  37. Function Such_Einstellen(Table: TIsamTable; Parent: TForm; var DATA, DUP; var Ref: Longint; var Key: IsamKeyStr;
  38.                          Liste: TStringList): Boolean;
  39. {call this procedure to search for data in the isamtable.
  40.  parameters:
  41.  TABLE: the isamtable, you will search
  42.  PARENT: the form, your will start from
  43.  DATA,DUP: the record, that is stored in your isamtable
  44.  REF: the isamtable's reference-number of the found record
  45.  KEY: the isamtable's key for the found record
  46.  LISTE: stringlist of possible keys
  47.  
  48.  Example:
  49. procedure T2Dialog.SearchBttnClick(Sender: TObject);
  50. var Ref: Longint;
  51.     Key: IsamKeyStr;
  52.     Liste: TStringList;
  53. begin
  54.   Liste:= TStringList.Create;
  55.   Liste.Add('NAME1');
  56.   Liste.Add('ZIP');
  57.   Liste.Add('NAMES');
  58.   if Such_Einstellen(T2DialogTable,Self,TestRecordData,TestRecordDup,Ref,Key,Liste) then begin
  59.     IsamBrowser1.KeyNumber := T2DialogTable.KeyNo;
  60.     IsamBrowser1.SetAndUpdateBrowserScreen(Key, Ref);
  61.     Key_Speichern(GetAppName,IsamBrowser1.Name,T2DialogTable.KeyNo);
  62.   end;
  63.   Liste.Free;
  64. end;
  65. }
  66. implementation
  67.  
  68. {$R *.DFM}
  69.  
  70. Uses UUseIsam, UToolDll;
  71.  
  72. Function Such_Einstellen(Table: TIsamTable; Parent: TForm; var DATA, DUP; var Ref: Longint; var Key: IsamKeyStr;
  73.                          Liste: TStringList): Boolean;
  74. var Txt: String;
  75.     i: Integer;
  76.     Found: Boolean;
  77. begin
  78.   Ref:= 0;
  79.   Key:= '';
  80.   Result:= False;
  81.   SuchDlg:= TSuchDlg.Create(Parent);
  82.   Try
  83.     if Liste.Count > 0 then begin
  84.       For i:= 0 to Liste.Count-1 do SuchDlg.ComboBox1.Items.Add(Liste[i]);
  85.       SuchDlg.ComboBox1.ItemIndex:= Table.KeyNo - 1;
  86.     end;
  87.     SuchDlg.IsamTable1:= Table;
  88.     GetMem(SuchDlg.RecordData,Table.RecSize);
  89.     GetMem(SuchDlg.RecordDup,Table.RecSize);
  90.     if SuchDlg.ShowModal = mrOk then begin
  91.       SatzLesen(Table.IfbPtr,Table.Ref,Data,Dup);
  92.       Ref:= Table.Ref;
  93.       Key:= Table.Key_Proc(Data,Table.KeyNo);
  94.       Table.Key:= Key;
  95.       KeySuchen(Table.ifbptr,Table.KeyNo,Table.Ref,Key,Found);
  96.       Result:= True;
  97.     end;
  98.   Finally
  99.     FreeMem(SuchDlg.RecordData,Table.RecSize);
  100.     FreeMem(SuchDlg.RecordDup,Table.RecSize);
  101.     SuchDlg.Free;
  102.   end;
  103. end;
  104.  
  105. function TSuchDlg.IsamBrowser1BuildRow(Sender: TObject;
  106.   var RR: RowRec): Integer;
  107. begin
  108.   Result := NoError;
  109.   Satzlesen(IsamTable1.IfbPtr,RR.Ref,RecordData^,RecordDup^);
  110.   RR.Row:= String_oem2Ansi(IsamTable1.AnsiConvert,
  111.                          IsamTable1.Key_Proc(RecordData^,IsamTable1.KeyNo));
  112. end;
  113.  
  114. procedure TSuchDlg.FormShow(Sender: TObject);
  115. begin
  116.   IsamBrowser1.ConnectLowBrowser(New(PLowWinBrowser, Init(True, IsamTable1.IFBPTR,
  117.        1, 50, 1, '', '', RecordData^, False )));
  118.   IsamBrowser1.KeyNumber := IsamTable1.KeyNo ;
  119.   Isambrowser1.SetAndUpdateBrowserScreen('',0);
  120. end;
  121.  
  122. procedure TSuchDlg.Edit1Change(Sender: TObject);
  123. begin
  124.   IsamBrowser1.LowKey:= String_Ansi2Oem(IsamTable1.AnsiConvert,Edit1.Text);
  125. end;
  126.  
  127. procedure TSuchDlg.OKBtnClick(Sender: TObject);
  128. var Ref: Longint;
  129. begin
  130.   IsamTable1.Ref:= IsamBrowser1.GetCurrentDatRef;
  131.   Satzlesen(IsamTable1.IfbPtr,Ref,RecordData^,RecordDup^);
  132.   ModalResult:= mrOk;
  133. end;
  134.  
  135. procedure TSuchDlg.ComboBox1Change(Sender: TObject);
  136. begin
  137.   Edit1.Text:= '';
  138.   IsamTable1.KeyNo:= ComboBox1.ItemIndex + 1;
  139.   IsamBrowser1.LowKey:= '';
  140.   IsamBrowser1.KeyNumber := IsamTable1.KeyNo;
  141.   Isambrowser1.SetAndUpdateBrowserScreen('',0);
  142. end;
  143.  
  144. procedure TSuchDlg.FormCreate(Sender: TObject);
  145. begin
  146.   if Sprache = 1 then begin
  147.     Caption:= 'Search';
  148.     Label2.Caption:= 'KEY';
  149.     Label1.Caption:= 'search for';
  150.   end;
  151. end;
  152.  
  153. end.
  154.